package java基础知识;

/**
 * @author coderFu
 * @create 2022/2/7
 * 懒汉式单例模式，双重检测优化
 */
public class LazySingletonDoubleCheck {
    //防止指令重排序，导致程序的执行顺序混乱

    private static volatile LazySingletonDoubleCheck lazySingletonDoubleCheck = null;

    private LazySingletonDoubleCheck(){

    }

    public static LazySingletonDoubleCheck getInstance(){
        if (lazySingletonDoubleCheck == null){ // 1 第一步 ，减少锁的竞争
            synchronized (LazySingletonDoubleCheck.class){ // 2 ，锁定防止创建对个实例
                if (lazySingletonDoubleCheck == null){ // 3 防止进入的再次创建
                    lazySingletonDoubleCheck = new LazySingletonDoubleCheck();
                }
            }
        }
        return lazySingletonDoubleCheck;
    }



}
